const CommentModel = require('../models/commentModel');
const { validateRequiredFields } = require('../utils/helpers');

class CommentController {
  // 添加评论
  static async addComment(req, res) {
    try {
      // 验证必需字段
      validateRequiredFields(req.body, ['openid', 'video_id', 'content']);
      
      const { openid, video_id: videoId, content } = req.body;
      
      // 限制评论长度
      if (content.length > 20) {
        return res.status(400).json({
          code: 400,
          msg: '评论内容不能超过20个字符'
        });
      }
      
      const comment = await CommentModel.addComment(openid, videoId, content);
      
      res.json({
        code: 200,
        msg: '评论成功',
        data: comment
      });
    } catch (error) {
      console.error('添加评论失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 获取视频评论列表（支持查询参数）
  static async getComments(req, res) {
    try {
      const { video_id, videoId, page = 1, pageSize = 20 } = req.query;
      const id = video_id || videoId;
      
      if (!id) {
        return res.status(400).json({
          code: 400,
          msg: '缺少视频ID'
        });
      }
      
      const result = await CommentModel.getCommentsByVideoId(
        id,
        parseInt(page),
        parseInt(pageSize)
      );
      
      res.json({
        code: 200,
        msg: '获取成功',
        data: result
      });
    } catch (error) {
      console.error('获取评论列表失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 获取视频评论列表（路径参数方式，兼容旧接口）
  static async getCommentsByVideoId(req, res) {
    try {
      const { videoId } = req.params;
      const { page = 1, pageSize = 20 } = req.query;
      
      if (!videoId) {
        return res.status(400).json({
          code: 400,
          msg: '缺少视频ID'
        });
      }
      
      const result = await CommentModel.getCommentsByVideoId(
        videoId,
        parseInt(page),
        parseInt(pageSize)
      );
      
      res.json({
        code: 200,
        msg: '获取成功',
        data: result
      });
    } catch (error) {
      console.error('获取评论列表失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 获取最近评论（全局）
  static async getRecent(req, res) {
    try {
      const { limit = 10 } = req.query;
      const rows = await CommentModel.getRecentComments(parseInt(limit));
      res.json({ code: 200, msg: '获取成功', data: rows });
    } catch (error) {
      console.error('获取最近评论失败:', error);
      res.status(500).json({ code: 500, msg: error.message || '服务器错误' });
    }
  }
}

module.exports = CommentController;